#include <iostream>
#include <queue>
#include <vector>
#include <cstring>
using namespace std;

int st[510];
int dist[510];
int cnt[510];
int n,m,w;
bool spfa(vector<pair<int,int>> edge[510])
{
	memset(dist,0,sizeof(dist));
	memset(cnt,0,sizeof(cnt));
	queue<int> q;
	for(int i=1;i<=n;i++)
	{
		q.push(i);
		st[i]=1;
	}
	while(q.size())
	{
		int r=q.front();
		q.pop();
		st[r]=0;
		for(auto& e:edge[r])
		{
			int x=e.first;
			if(dist[x]>dist[r]+e.second)
			{
				dist[x]=dist[r]+e.second;
				if(!st[x])
				{
					q.push(x);
					st[x]=1;
					cnt[x]=cnt[r]+1;
				}
				if(cnt[x]>=n)
					return true;
			}
		}
	}
	return false;
}
int main()
{
	int T;
	cin>>T;
	
	while(T--)
	{
		memset(st,0,sizeof(st));
		vector<pair<int,int>> edge[510];
		cin>>n>>m>>w;
		for(int i=0;i<m;i++)
		{
			int s,e,t;
			cin>>s>>e>>t;
			edge[s].push_back({e,t});
			edge[e].push_back({s,t});
		}
		
		for(int i=0;i<w;i++)
		{
			int s,e,t;
			cin>>s>>e>>t;
			edge[s].push_back({e,-t});
		}
		
		if(spfa(edge))
		{
			cout<<"YES"<<endl;
		}
		else{
			cout<<"NO"<<endl;
		}
	}
	return 0;
}
